package com.easydev.mq;

import com.easydev.mq.exception.MessageException;

/**
 * <Description>消息接口定义类 <br>
 * 
 * @author lx<br>
 */
public interface MessageTemplate {

    /**
     * Description: 简单消息发送，用于针对指定队列的发送(P2P)<br>
     * 
     * @author lx<br>
     * @param queneName 队列名称
     * @param message 消息对象
     * @return
     * @throws MessageException 出现连接错误等异常时抛出<br>
     */
    void sendMessage(String queneName, Object message) throws Exception;

    /**
     * Description: 简单广播消息发送，用于基于订阅/发布模式（Pub/Sub）<br>
     * 
     * @author lx<br>
     * @param topicName topic名
     * @param message 消息对象
     * @throws MessageException 出现连接错误等异常时抛出<br>
     */
    void sendTopicMessage(String topicName, Object message) throws Exception;

    /**
     * Description: 快速创建一个非持久化的队列<br>
     * 
     * @author lx<br>
     * @taskId <br>
     * @param queneName 队列名
     * @return queneName队列
     * @throws MessageException <br>
     */
    Object createQueue(String queneName) throws Exception;

    /**
     * Description: 创建一个队列，可以指定是否持久化<br>
     * 
     * @author lx<br>
     * @param queneName 队列名
     * @param durable 是否持久化，true 是 false 否
     * @return queneName队列
     * @throws MessageException <br>
     */
    Object createQueue(String queneName, boolean durable) throws Exception;

    /**
     * Description: 创建一个名为topicName的topic<br>
     * 
     * @author lx<br>
     * @param topicName topic名
     * @return topicName广播，默认：
     * @throws MessageException <br>
     * @throws Exception
     */
    void createTopic(String topicName) throws Exception;

    /**
     * Description: 删除指定queue<br>
     * 
     * @author lx<br>
     * @param queneName 队列名
     * @throws MessageException <br>
     */
    void deleteQueue(String queneName) throws Exception;

    /**
     * Description: 删除指定topic<br>
     * 
     * @author lx<br>
     * @param topicName
     * @throws MessageException <br>
     */
    void deleteTopic(String topicName) throws Exception;
}
